package com.sinog.biz.service.business.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sinog.biz.mapper.havexml.OrgStaffInfoMapper;
import com.sinog.biz.service.business.OrgStaffInfoService;
import com.sinog.biz.util.IdGen;
import com.sinog.core.domain.OrgStaffInfo;
import com.sinog.core.util.JsonUtil;
import com.sinog.core.util.PageReturnUtil;
import com.sinog.core.util.PhoneUtil;
import com.sinog.core.util.StrUtil;
import com.sinog.core.utilbean.Constants;
import com.sinog.core.utilbean.Result;
import com.sinog.core.utilbean.ReturnCode;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @desc 安帮工作资源管理 - 机构人员信息管理 - 机构人员信息管理 - serviceImpl
 * @author dangyf
 * @date 2020年3月10日 14点52分
 */
@Service
public class OrgStaffInfoServiceImpl extends ServiceImpl<OrgStaffInfoMapper,OrgStaffInfo> implements OrgStaffInfoService {

    @Resource
    private OrgStaffInfoMapper orgStaffInfoMapper;

    /**
     * 安帮工作资源管理 - 机构人员信息管理 - 机构人员信息管理 - 列表
     * @param searchKey 搜索条件
     * @param pageIndex 页码
     * @param pageSize 每页条数
     * @param departId 部门ID
     * @param searchDepart searchDepart
     * @return json字符串
     */
    @Override
    public String getOrgStaffInfoList(String searchKey,Integer pageIndex,Integer pageSize,String departId,String searchDepart) {
        //参数转换
        searchKey = StrUtil.converseToNull(searchKey);
        searchDepart = StrUtil.converseToNull(searchDepart);
        Page<Map<String,String>> page = new Page<>(pageIndex + 1,pageSize);
        page = page.setRecords(orgStaffInfoMapper.getOrgStaffInfoList(page,searchKey,departId,searchDepart));
        List<Map<String,String>> records = page.getRecords();
        for(Map<String,String> record : records) {
            if(record.get("phone") != null) {
                Map<String,String> telAndPhone = PhoneUtil.splitTelAndPhone(record.get("phone"));
                record.put("tel",StringUtils.isBlank(telAndPhone.get("tel"))? Constants.StrFinalValue.WU:telAndPhone.get("tel"));
                record.put("phone",StringUtils.isBlank(telAndPhone.get("phone"))? Constants.StrFinalValue.WU:telAndPhone.get("phone"));
            }
        }
        return PageReturnUtil.pageReturn(page);
    }

    /**
     * 安帮工作资源管理 - 机构人员信息管理 - 机构人员信息管理 - 保存机构人员信息（修改/新增）
     * @param data data
     * @param loginUserParam loginUserParam
     * @return Result
     */
    @Override
    public Result save(String data,Map<String,String> loginUserParam) {
        //参数实体
        OrgStaffInfo orgStaffInfo = JsonUtil.toBean(data,OrgStaffInfo.class);
        Date date = new Date();
        boolean mark = StringUtils.isEmpty(orgStaffInfo.getId());
        if(mark) {
            //新增
            orgStaffInfo.setId(IdGen.strid());
            orgStaffInfo.setDepartid(loginUserParam.get("departId"));
            orgStaffInfo.setDepartname(loginUserParam.get("departName"));
            orgStaffInfo.setLevel(loginUserParam.get("level"));
            orgStaffInfo.setOrgid(loginUserParam.get("orgId"));
            orgStaffInfo.setOrgname(loginUserParam.get("orgName"));
            orgStaffInfo.setCreateUser(loginUserParam.get("loginUser"));
            orgStaffInfo.setCreateTime(date);
        }
        //更新
        orgStaffInfo.setUpdateUser(loginUserParam.get("loginUser"));
        orgStaffInfo.setUpdateTime(date);
        boolean insertResult = orgStaffInfo.insertOrUpdate();
        if(insertResult) {
            return Result.success("保存成功");
        }
        return Result.failure(ReturnCode.SAVE_FAILED);
    }

    /**
     * 安帮工作资源管理 - 机构人员信息管理 - 机构人员信息管理 - 删除工作人员信息
     * @param id id
     * @return Result
     */
    @Override
    public Result deleteOne(String id) {
        OrgStaffInfo orgStaffInfo = new OrgStaffInfo();
        boolean result = orgStaffInfo.deleteById(id);
        if(result) {
            return Result.success("删除成功！");
        }
        return Result.failure(ReturnCode.DELETE_FAILED);
    }
}